<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>队列的封装和使用</title>
</head>

<body>
    <script>
        // 基于数组封装队列类
        function Queue() {
            // 属性
            this.items = [];
            // 方法
            // 1.enqueue()方法将元素加入到队列中
            Queue.prototype.enqueue = function (element) {
                this.items.push(element)
            }
            // 2. dequeue() 方法从队列前端删除元素
            Queue.prototype.dequeue = function () {
                return this.items.shift()
            }
            // 3. front() 方法查看队列前端的元素
            Queue.prototype.front = function () {
                return this.items[0]
            }
            // 4. isEmpty() 方法 查看队列中是否为空
            Queue.prototype.isEmpty = function () {
                return this.items.length == 0
            }
            // 5. size() 方法 查看队列中元素的个数
            Queue.prototype.size = function () {
                return this.items.length
            }
            // 6. toString() 方法 将对列中的元素以字符串形式输出
            Queue.prototype.toString = function () {
                let resultString = '';
                for (let i of this.items) {
                    resultString += i + ' '
                }
                return resultString
            }

        }
        var queue = new Queue();

        // 测试代码
        // 将元素加入到队列中
        queue.enqueue('a')
        queue.enqueue('b')
        queue.enqueue('c')
        console.log(queue);   // ['a', 'b', 'c']

        // 将元素从队列中删除
        queue.dequeue()
        console.log(queue);   // ['b', 'c']

        // 查看队列的第一个元素

        console.log(queue.front()); // b

        // 验证其他方法
        console.log(queue.isEmpty()); // false
        console.log(queue.size()); // 2
        console.log(queue.toString()); // b c



    </script>
</body>

</html>